#ifndef __PROTOCAL_OTDR_H__
#define __PROTOCAL_OTDR_H__

#include <fpga-common.h>

#define TG60_ADDR_SW_NUM (1)
#define TG60_ADDR_SW_FUN (2)

struct priv_otdr_data
{
    int cache_len;
    int sample_byte;  // 读取内容

#define TG60_OTDR_CH (1)
#define TG60_VDS_CH  (2)
    int sw_fun;  // bit[5-0] TG60 OTDR或VDS
    int sw_num;  // bit[7-6] TG60 光开关面板
};

/*
这些有单下划线的函数，其实都是用来填充struct fpga_if的指针
不要直接调用它，应模仿下面写法“注册”

static struct fpga_if interface_example = {
    DEFAULT_FPGA_IF,
    ...
    .pfun_probe   = _fpga_otdr_probe,
    .private_data  = &data_64k,
    .name	       = "this-otdr-example",
};

static void __attribute__((constructor(INIT_BSP))) this_init()
{
    fpga_if_register(&interface_example);
}
*/
extern int cb_fpga_otdr_probe(struct fpga_dev *dev);
extern int cb_fpga_otdr_release(struct fpga_dev *dev);
extern int cb_fpga_otdr_start(struct fpga_dev *dev);
extern int cb_fpga_otdr_isfinish(struct fpga_dev *dev, bool *val);
extern int cb_fpga_otdr_stop(struct fpga_dev *dev);
extern int cb_fpga_read_otdr_data(
	struct fpga_dev *dev,
	unsigned char   *otdr_data,
	unsigned long    len,
	unsigned long   *rlen);
extern int cb_fpga_otdr_write_regs(struct fpga_dev *dev, unsigned int base_addr, unsigned int *regs, int len);

extern int cb_otdr_set_gpio(struct fpga_dev *dev, int io, int val);

/** @defgroup 红光模式
 * @{
 */
#define OTDR_RL_OFF     (0)  ///< 关闭红光
#define OTDR_RL_ON      (1)  ///< 红光常亮 1.2ms高电平，3.7ms低电平
#define OTDR_RL_1HZ     (2)
#define OTDR_RL_10HZ    (3)
#define OTDR_RL_SLOW    OTDR_RL_1HZ   ///< 红光慢闪烁 1HZ 500ms高电平，500ms低电平
#define OTDR_RL_FAST    OTDR_RL_10HZ  ///< 红光快闪烁 10HZ 100ms高电平，100ms低电平
/** end 红光模式
 * @}
 */

#define IO_OTDR_RED     (1)
#define IO_OTDR_ON_TEST (2)
#endif